使Guava的插件实现equals, hashCode 和 toString方法(idea)
条评论问题引入
POJO 类需要编写equals, hashCode 和 toString方法,通常只需要一个模板就能完成,目前我们已经可以让IDE使用插件来帮我们完成这些工作。但是通常由IDE自动生成的这些代码都非常难看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class UserAddrInfo implements Serializable {
private static final long serialVersionUID = 1900570942803605101L;
/**
* 用户uid
*/
private Integer uid;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 区
*/
private String area;
/**
* 详细地址( 领地一 / 领地二 )
*/
private String addrDetail;
// constructor
// getters, setters if needed
}
通常做法
目前的主流IDE都能够生成符合需求的方法的代码,但是生成的equals、hashCode和toString方法代码通常看起来就像下面这样:
equals
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserAddrInfo that = (UserAddrInfo) o;
if (uid != null ? !uid.equals(that.uid) : that.uid != null) return false;
if (province != null ? !province.equals(that.province) : that.province != null) return false;
if (city != null ? !city.equals(that.city) : that.city != null) return false;
if (area != null ? !area.equals(that.area) : that.area != null) return false;
return addrDetail != null ? addrDetail.equals(that.addrDetail) : that.addrDetail == null;
}hashCode
1
2
3
4
5
6
7
8
9
public int hashCode() {
int result = uid != null ? uid.hashCode() : 0;
result = 31 * result + (province != null ? province.hashCode() : 0);
result = 31 * result + (city != null ? city.hashCode() : 0);
result = 31 * result + (area != null ? area.hashCode() : 0);
result = 31 * result + (addrDetail != null ? addrDetail.hashCode() : 0);
return result;
}toString
1
2
3
4
5
6
7
8
9
10
public String toString() {
return "UserAddrInfo{" +
"uid=" + uid +
", province='" + province + '\'' +
", city='" + city + '\'' +
", area='" + area + '\'' +
", addrDetail='" + addrDetail + '\'' +
'}';
}
使用Guava库来解决
Google Guava是一个提供了很多非常使用Java工具的精巧的库。我们可以使用Google Guava来重写上面的三个方法来使得代码显得更好看:
equals
1
2
3
4
5
6
7
8
9
10
11
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserAddrInfo that = (UserAddrInfo) o;
return Objects.equal(uid, that.uid) &&
Objects.equal(province, that.province) &&
Objects.equal(city, that.city) &&
Objects.equal(area, that.area) &&
Objects.equal(addrDetail, that.addrDetail);
}hashCode – 只需要一行
1
2
3
4
public int hashCode() {
return Objects.hashCode(uid, province, city, area, addrDetail);
}toString
1
2
3
4
5
6
7
8
9
10
public String toString() {
return Objects.toStringHelper(this)
.add("uid", uid)
.add("province", province)
.add("city", city)
.add("area", area)
.add("addrDetail", addrDetail)
.toString();
}
安装Intellij IDEA插件
使用idea不久,边已经非常喜欢这款智能,友善的帮手了,下面总结下使用idea安装guava equals,hashCode,和 toString 自动生成代码的插件
可以插件搜索页面查询 equals 边可以找到该插件,下载安装即可
打开一个POJO ,键入 ALT + INS 就可以为POJO 生成equals 和 hashCode,toString
3.模板 选择guava
设置完成,以后只要在POJO 类中,键入 ALT + INS 就可以自动生成guava风格的equals,hashCode,toString 方法了
guava 库优雅高效,要准备花时间掌握下了~